package com.lyf.scm.admin.domain.service;

import com.github.pagehelper.PageInfo;
import com.lyf.scm.admin.api.dto.DateLabelDTO;
import com.lyf.scm.admin.domain.remote.basedata.dto.*;
import com.lyf.scm.admin.domain.remote.item.dto.CategoryBaseInfoDTO;
import com.lyf.scm.admin.domain.remote.item.dto.UnitTypeDTO;
import com.lyf.scm.common.model.SalesPlanSelectDTO;

import java.util.Date;
import java.util.List;

/**
 * @author 李兵兵
 * @date 2020/08/12
 */
public interface OutService {

    /**
     * 根据后台类目父id查询下级节点（查询后台树-鲲鹏）
     *
     * @param parentId 父id
     * @return {@link List <CategoryBaseInfoDTO>}
     */
    List<CategoryBaseInfoDTO> getLowerLevelCategoryByParentId(Long parentId);

    /**
     * 根据品类的code查询后台类目信息(包括下一级类目的信息)
     *
     * @param stringList 字符串列表
     * @return {@link List<CategoryBaseInfoDTO>}
     */
    List<CategoryBaseInfoDTO> categoryListByCategoryCodes(List<String> stringList);

    /**
     * 单个根据类目ID查询SKU数据
     *
     * @param categoryId 类别id
     * @param pageNum    页面num
     * @param pageSize   页面大小
     * @return {@link List<CategoryBaseInfoDTO>}
     */
    List<SalesPlanSelectDTO> skuListByCategoryId(Long categoryId, Integer pageNum, Integer pageSize);

    /**
     * 查询品类的层级接口
     *
     * @param level 水平
     * @return {@link List<CategoryBaseInfoDTO>}
     */
    List<CategoryBaseInfoDTO> getCategoryListByLevel(Integer level);

    /**
     * 根据Level等级获取区域信息
     *
     * @param level
     * @return
     */
    PageInfo<AreaDTO> searchAreaByLevels(List<Integer> level);

    /**
     * 据parentCode获取所有下级地址根
     *
     * @param parentCode
     * @return
     */
    List<SalesPlanSelectDTO> searchByParentCode(String parentCode);

    /**
     * 根据当前日期获取前三周后十四周公立节假日（对计划接口）
     *
     * @param startDate
     * @return {@link List< DateLabelDTO >}
     **/
    List<DateLabelDTO> getDateLabels(Date startDate);

    /**
     * 查询采购单位
     *
     * @return {@link List<UnitTypeDTO>}
     */
    List<UnitTypeDTO> listUnitType();

    /**
     * 查询所有公司信息
     *
     * @return {@link List< SaleOrgDTO >}
     */
    List<SalesPlanSelectDTO> listSaleOrg();

    /**
     * 根据父渠道code查询子渠道
     *
     * @param parentChannel 家长频道
     * @return {@link List<ChannelDTO>}
     */
    List<SalesPlanSelectDTO> parentChannel(String parentChannel);

    /**
     * 根据等级查询渠道
     *
     * @param level 水平
     * @return {@link List<ChannelDTO>}
     */
    List<SalesPlanSelectDTO> queryByLevel(Integer level);


    /**
     * 筛选出对应区域的门店
     *
     * @param storeParamDTO 存储参数dto
     * @param pageNum       页面num
     * @param pageSize      页面大小
     * @return {@link List<SalesPlanSelectDTO>}
     */
    List<SalesPlanSelectDTO> listStore(SearchStoreParamDTO storeParamDTO,
                                       Integer pageNum,
                                       Integer pageSize);

    /**
     * 根据角色获取最高级区域信息
     *
     * @param
     * @return {@link List<AreaDTO>}
     **/
    List<AreaDTO> searchAreaByRole();

    /**
     * 通过类型查询仓库
     *
     * @param realWarehouseType
     * @return {@link List<StoreDTO>}
     **/
    List<StoreDTO> queryFactoryByRwType(Integer realWarehouseType);

    List<AreaDTO> searchAllAreaList();
}
